package com.ai.dmc.utils.export.excelhelper;

import java.util.Collection;
import java.util.List;

import javax.servlet.http.HttpServletResponse;

public interface ITExcelExporter<T> {

	/**
	 *  单行表头Excel表格，数据集以类对象的方式组织，即一条记录即为一个类对象
	 * @param sheetName：表单标签名称
	 * @param headers：表单表头，存储顺序即为列的显示顺序，不能为null
	 * @param dataset：数据集合，以类对象的方式组织，类对象必须提供获取相应属性的方法
	 * @param methodNames：获取类对象属性的方法，顺序需与headers对应，可以为null，
	 * 					   当为null时，将获取类对象所有的属性，顺序为类对象中属性声明的顺序，
	 * 					   而且不能有所增减，将列出所有的属性，并且类必须遵循Hibernate中bean的
	 * 					   属性获取规则，即String型的以get开头，Boolean型以Is开头，后面加上属性的名称，
	 * 					   并且，所加属性名称的头字母要大写
	 * @param pattern：日期的格式，可以为null，当为null时，采用默认的格式“yyyy-MM-dd”
	 * @param response
	 */
	public void exportExcelByObj(String sheetName, String[] headers,
			Collection<T> dataset, String[] methodNames, String pattern, HttpServletResponse response);
	
	/**
	 *  多行表头Excel表格，数据集以类对象的方式组织，即一条记录即为一个类对象
	 * @param sheetName：表单标签名称
	 * @param headerList：表单表头，内部是CellBean，一个CellBean为一个单元格，CellBean必须严格按照要求组织，否则
	 * 					  会导致表头显示不正确
	 * @param dataset：数据集合，以类对象的方式组织，类对象必须提供获取相应属性的方法
	 * @param methodNames：获取类对象属性的方法，顺序需与headers对应，可以为null，
	 * 					   当为null时，将获取类对象所有的属性，顺序为类对象中属性声明的顺序，
	 * 					   而且不能有所增减，将列出所有的属性，并且类必须遵循Hibernate中bean的
	 * 					   属性获取规则，即String型的以get开头，Boolean型以Is开头，后面加上属性的名称，
	 * 					   并且，所加属性名称的头字母要大写
	 * @param pattern：日期的格式，可以为null，当为null时，采用默认的格式“yyyy-MM-dd”
	 * @param response
	 */
	public void exportExcelByObj(String sheetName, List<CellBean> headerList,
			Collection<T> dataset, String[] methodNames, String pattern, HttpServletResponse response);
}
